home *** CD-ROM | disk | FTP | other *** search
/ Freelog 115 / FreelogNo115-MaiJuin2013.iso / Internet / Filezilla Server / FileZilla_Server-0_9_41.exe / source / includes / openssl / aes.h next >
C/C++ Source or Header  |  2012-02-26  |  6KB  |  149 lines

  1. /* crypto/aes/aes.h -*- mode:C; c-file-style: "eay" -*- */
  2. /* ====================================================================
  3.  * Copyright (c) 1998-2002 The OpenSSL Project.  All rights reserved.
  4.  *
  5.  * Redistribution and use in source and binary forms, with or without
  6.  * modification, are permitted provided that the following conditions
  7.  * are met:
  8.  *
  9.  * 1. Redistributions of source code must retain the above copyright
  10.  *    notice, this list of conditions and the following disclaimer. 
  11.  *
  12.  * 2. Redistributions in binary form must reproduce the above copyright
  13.  *    notice, this list of conditions and the following disclaimer in
  14.  *    the documentation and/or other materials provided with the
  15.  *    distribution.
  16.  *
  17.  * 3. All advertising materials mentioning features or use of this
  18.  *    software must display the following acknowledgment:
  19.  *    "This product includes software developed by the OpenSSL Project
  20.  *    for use in the OpenSSL Toolkit. (http://www.openssl.org/)"
  21.  *
  22.  * 4. The names "OpenSSL Toolkit" and "OpenSSL Project" must not be used to
  23.  *    endorse or promote products derived from this software without
  24.  *    prior written permission. For written permission, please contact
  25.  *    openssl-core@openssl.org.
  26.  *
  27.  * 5. Products derived from this software may not be called "OpenSSL"
  28.  *    nor may "OpenSSL" appear in their names without prior written
  29.  *    permission of the OpenSSL Project.
  30.  *
  31.  * 6. Redistributions of any form whatsoever must retain the following
  32.  *    acknowledgment:
  33.  *    "This product includes software developed by the OpenSSL Project
  34.  *    for use in the OpenSSL Toolkit (http://www.openssl.org/)"
  35.  *
  36.  * THIS SOFTWARE IS PROVIDED BY THE OpenSSL PROJECT ``AS IS'' AND ANY
  37.  * EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
  38.  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
  39.  * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE OpenSSL PROJECT OR
  40.  * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
  41.  * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
  42.  * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
  43.  * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
  44.  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
  45.  * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
  46.  * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED
  47.  * OF THE POSSIBILITY OF SUCH DAMAGE.
  48.  * ====================================================================
  49.  *
  50.  */
  51.  
  52. #ifndef HEADER_AES_H
  53. #define HEADER_AES_H
  54.  
  55. #include <openssl/opensslconf.h>
  56.  
  57. #ifdef OPENSSL_NO_AES
  58. #error AES is disabled.
  59. #endif
  60.  
  61. #define AES_ENCRYPT    1
  62. #define AES_DECRYPT    0
  63.  
  64. /* Because array size can't be a const in C, the following two are macros.
  65.    Both sizes are in bytes. */
  66. #define AES_MAXNR 14
  67. #define AES_BLOCK_SIZE 16
  68.  
  69. #ifdef OPENSSL_FIPS
  70. #define FIPS_AES_SIZE_T    int
  71. #endif
  72.  
  73. #ifdef  __cplusplus
  74. extern "C" {
  75. #endif
  76.  
  77. /* This should be a hidden type, but EVP requires that the size be known */
  78. struct aes_key_st {
  79. #ifdef AES_LONG
  80.     unsigned long rd_key[4 *(AES_MAXNR + 1)];
  81. #else
  82.     unsigned int rd_key[4 *(AES_MAXNR + 1)];
  83. #endif
  84.     int rounds;
  85. };
  86. typedef struct aes_key_st AES_KEY;
  87.  
  88. const char *AES_options(void);
  89.  
  90. int AES_set_encrypt_key(const unsigned char *userKey, const int bits,
  91.     AES_KEY *key);
  92. int AES_set_decrypt_key(const unsigned char *userKey, const int bits,
  93.     AES_KEY *key);
  94.  
  95. void AES_encrypt(const unsigned char *in, unsigned char *out,
  96.     const AES_KEY *key);
  97. void AES_decrypt(const unsigned char *in, unsigned char *out,
  98.     const AES_KEY *key);
  99.  
  100. void AES_ecb_encrypt(const unsigned char *in, unsigned char *out,
  101.     const AES_KEY *key, const int enc);
  102. void AES_cbc_encrypt(const unsigned char *in, unsigned char *out,
  103.     const unsigned long length, const AES_KEY *key,
  104.     unsigned char *ivec, const int enc);
  105. void AES_cfb128_encrypt(const unsigned char *in, unsigned char *out,
  106.     const unsigned long length, const AES_KEY *key,
  107.     unsigned char *ivec, int *num, const int enc);
  108. void AES_cfb1_encrypt(const unsigned char *in, unsigned char *out,
  109.     const unsigned long length, const AES_KEY *key,
  110.     unsigned char *ivec, int *num, const int enc);
  111. void AES_cfb8_encrypt(const unsigned char *in, unsigned char *out,
  112.     const unsigned long length, const AES_KEY *key,
  113.     unsigned char *ivec, int *num, const int enc);
  114. void AES_cfbr_encrypt_block(const unsigned char *in,unsigned char *out,
  115.                 const int nbits,const AES_KEY *key,
  116.                 unsigned char *ivec,const int enc);
  117. void AES_ofb128_encrypt(const unsigned char *in, unsigned char *out,
  118.     const unsigned long length, const AES_KEY *key,
  119.     unsigned char *ivec, int *num);
  120. void AES_ctr128_encrypt(const unsigned char *in, unsigned char *out,
  121.     const unsigned long length, const AES_KEY *key,
  122.     unsigned char ivec[AES_BLOCK_SIZE],
  123.     unsigned char ecount_buf[AES_BLOCK_SIZE],
  124.     unsigned int *num);
  125.  
  126. /* For IGE, see also http://www.links.org/files/openssl-ige.pdf */
  127. /* NB: the IV is _two_ blocks long */
  128. void AES_ige_encrypt(const unsigned char *in, unsigned char *out,
  129.              const unsigned long length, const AES_KEY *key,
  130.              unsigned char *ivec, const int enc);
  131. /* NB: the IV is _four_ blocks long */
  132. void AES_bi_ige_encrypt(const unsigned char *in, unsigned char *out,
  133.             const unsigned long length, const AES_KEY *key,
  134.             const AES_KEY *key2, const unsigned char *ivec,
  135.             const int enc);
  136.  
  137. int AES_wrap_key(AES_KEY *key, const unsigned char *iv,
  138.         unsigned char *out,
  139.         const unsigned char *in, unsigned int inlen);
  140. int AES_unwrap_key(AES_KEY *key, const unsigned char *iv,
  141.         unsigned char *out,
  142.         const unsigned char *in, unsigned int inlen);
  143.  
  144. #ifdef  __cplusplus
  145. }
  146. #endif
  147.  
  148. #endif /* !HEADER_AES_H */
  149.